Networks typically include many different types of devices. For example, a typical network may include tens to hundreds of routers, switches, gateways, servers, etc. that aid in transporting data from a source to a destination. Changing the configuration of these devices can be cumbersome task. For example, in many instances, the network devices are manually configured to reflect a change. This approach is very time consuming and error prone. In other instances, network devices are configured on a device by device basis using scripts. This approach is also time consuming and requires that the scripts be maintained by programmers.